package ai.people.platform.archives.service;

import ai.people.netmon.framework.domain.key.account.request.CollisionRequest;
import ai.people.netmon.framework.domain.key.account.request.ExtendRequest;
import ai.people.netmon.framework.domain.key.account.request.SearchRequest;
import ai.people.netmon.framework.domain.key.account.vo.CollisionResultVO;
import ai.people.netmon.framework.domain.key.account.vo.ExtendVO;
import ai.people.netmon.framework.domain.key.account.vo.KeyAccountGraph;
import ai.people.netmon.framework.domain.key.account.vo.SearchListVO;
import ai.people.netmon.framework.domain.warning.request.account.AccountRegisterInfoRequest;

import java.util.List;

/**
 * @author zhenglin
 * @date 2022/7/26
 */
public interface KeyAccountRelationService {


    /**
     * 关系图谱-查看图
     *
     * @param id id
     * @return {@link KeyAccountGraph}
     * @throws Exception 异常
     */
    KeyAccountGraph getGraph(Long id) throws Exception;


    /**
     * 关系图谱-更新图
     *
     * @param vo 签证官
     * @throws Exception 异常
     */
    void updateGraph(KeyAccountGraph vo) throws Exception;

    /**
     * 关系图谱-扩线
     *
     * @param request 请求
     * @return {@link ExtendVO}
     * @throws Exception 异常
     */
    ExtendVO extend(ExtendRequest request) throws Exception;

    /**
     * 关系图谱-碰撞
     *
     * @param request 请求
     * @return {@link CollisionResultVO}
     * @throws Exception 异常
     */
    CollisionResultVO collision(CollisionRequest request) throws Exception;

    /**
     * 辅助落查-查看图
     *
     * @param id id
     * @return {@link KeyAccountGraph}
     * @throws Exception 异常
     */
    KeyAccountGraph searchGraph(Long id) throws Exception;

    /**
     * 辅助落查-更新图
     *
     * @param graph 图
     * @throws Exception 异常
     */
    void updateSearchGraph(KeyAccountGraph graph) throws Exception;

    /**
     * 辅助落查-点击开始落查
     *
     * @param request 请求
     * @return {@link List}<{@link SearchListVO}>
     */
    List<SearchListVO> searchStartFind(SearchRequest request) throws InterruptedException;


    /**
     * 检查是否能更新基本信息
     *
     * @param accountRegisterInfoRequest 账户注册信息请求
     * @return boolean
     */
    boolean checkUpdate(AccountRegisterInfoRequest accountRegisterInfoRequest) throws Exception;



}
